home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / COMMUNIC / H191.ZIP / CA29-3.EXE / HOST.SRC < prev    next >
Text File  |  1993-07-14  |  20KB  |  718 lines

  1. ;    trace on        ; Debugging
  2. ;
  3. ; ----- COM-AND Scripted host mode ----------------------------------
  4. ;
  5. ;    Goals:
  6. ;    o    Must autodetect caller's baud rate
  7. ;    o    Must work correctly for modems reporting true CD and otherwise.
  8. ;    o    Must log all activity
  9. ;
  10. ;    Functions:
  11. ;    o    Passworded log-on
  12. ;    o    DIR of current directory
  13. ;    o    CHDIR command
  14. ;    o    UP and DOWNLOADS
  15. ;    o    Graphical path display (using P/D TREED program)
  16. ;    o    Passworded DOS access (dangerous!)
  17. ;    o    Passworded drop-to-DOS using a doorway function
  18. ;
  19. ;    Commenced: 10/29/87 R.McG
  20. ;    Updated:    2/--/89 R.McG
  21. ;           10/--/89 R.McG  ZMODEM added
  22. ;    Ver 1.1:   11/--/90 R.McG  HOSETUP added
  23. ;            6/--/91 R.McG  DROPDOS added
  24. ;    Ver 1.2:    4/--/93 R.McG (Added SCHEDULER hook for one-call use)
  25. ;                  (Changed to use HOSTTEMP.STR for door rtn)
  26. ;                  (allow sysop to type user commands from kbd)
  27. ;    --------------------------------------------------------------
  28. ;    Data for this script are established through the HOSETUP script.
  29. ;    The drop-to-DOS requires a doorway function (such as DOORWAY,
  30. ;    by Marshsall Dudley).  The only other file requisite to this
  31. ;    HOST script is the TREED p/d utility.
  32. ;    --------------------------------------------------------------
  33. ;
  34. ;    Initialize
  35. ;
  36.     LEGEND "Scripted HOST mode (1.2).  Press ESC to exit."
  37. ;
  38. ;    Set default values (in case HOSTDAT does not exist)
  39. ;
  40.     S20 = "_PARM"(11:14)*","*"_PARM"(0:3) ; Port(4),speed(4)
  41.     S21 = "ATE0Q0V1X1S0=2 S7=30 S9=10^M"  ; Standard MINIT for HOST
  42.     S22 = "****"                    ; Set default logon password
  43.     S23 = "xxxx"                    ; Set default DOS password
  44.     S24 = ""                        ; Drop to DOS command
  45. ;
  46. ;    Initialize COM related values (This is done here to allow HOSTDAT
  47. ;    ... edits to override these settings)
  48. ;
  49.     SET PARITY NONE         ; fixed no parity
  50.     SET DATA 8            ; fixed 8 data bits
  51.     SET STOP 1            ; fixed 1 stop bit
  52.     SET MASK ON            ; accept 7 or 8 bits
  53.     SET CR_IN CR_LF         ; Display received c/rs as a cr/lf
  54.     SET ASCII UP_LF LF        ; Send LFs
  55.     SET SOFTFLOW ON         ; Allow XON/XOFF
  56. ;
  57. ;    Replace above values from HOSTDAT, if that script exists
  58. ;
  59.     IF ISSC "HOSTDAT" FCALL "HOSTDAT"
  60. ;
  61. ;    Initialize variables that must be constant
  62. ;
  63.     S0 = S22            ; Set to our subdirectory
  64.     S3 = S23            ; Set subdir for files
  65.     SUBDIR S29            ; Read current subdir
  66.     DLDIR S28            ; Read current download subdir
  67. ;
  68. ;    Set initial values that do not change port setting
  69. ;
  70.     LOG MARK ON            ; Timestamp logging
  71.     CLOG "* Host script loaded"
  72.     ON ESCAPE GOSUB End        ; Exit routine
  73.     SET INAFTER OFF         ; Turn off init after hangup
  74.     SET ALARM OFF            ; Turn off alarm
  75.     SET ATIME 1            ; Set alarm time to 1 second
  76. ;
  77. ;    If this is a restart, pickup at the main prompt
  78. ;
  79.     SET PORT S20(0:3)        ; Starting port
  80.     IF ISFILE "HOSTTEMP.STR" and ISFILE "HOSTTEMP.BAT"
  81.        SET RECHO ON         ; Restart - need to reenable
  82.        DELETE "HOSTTEMP.STR"        ; Done w/the file
  83.        LOG OPEN "HOSTLOG"           ; .. reenable
  84.        CLOG "* Return from drop-to-DOS"
  85.        GOTO Main_Prompt
  86.        ENDIF
  87. ;
  88. ;    Initialize values that change port setting, and start a new call
  89. ;
  90.     SET BAUD S20(5:8)        ; Starting speed
  91.     TRANSMIT "_MESCAPE"             ; Initialize modem (modem escape)
  92.     GOTO Restart            ; Branch around subroutines
  93. ;
  94. ; -----------------------------------------------------------------------
  95. ;    Subroutine: End of HOST
  96. ;    4/93: Transmit MINIT *before* RESET, in case modem in use by BBS
  97. ;          is not modem default for COM-AND (MINIT turns off answer)
  98. ; -----------------------------------------------------------------------
  99. ;
  100. End:
  101.     HANGUP                ; Hangup the phone
  102.     CLOG "* HOST script terminated" ; Log completion
  103.     SET DLDIR S28            ; Reset dldir
  104.     CHDIR S29            ; Reset to default directory
  105.     CLEAR                ; Clear screen
  106.     MESS "HOST terminated... type Alt-X to exit COM-AND^M^J^M^J"
  107.     TRAN "_MINIT"                   ; Initialize modem from defaults
  108.  
  109.     RESET                ; Reset default values
  110.     DELETE "\HOSTTEMP.TXT"          ; Cleanup
  111.     IF ISSC "$$$SCHED" EXECUTE "$$$SCHED" ; And chain back after call
  112.     EXIT                ; Exit
  113. ; -----------------------------------------------------------------------
  114. ;    Subroutine: Read from the caller into S9 (modified 7/93 for kbd)
  115. ;    .. This handles 'disconnect' and timeouts, and allows sysop typethru
  116. ;    -----------------------------------------------------------------
  117. ;    S27, S28, S29, N30, N27 and TIMER(0) are used in this procedure
  118. ;    S9 returns the text read (if any)
  119. ;
  120. ;    FLAG(0) off -> Line read correctly
  121. ;        on --> Disconnect or timeout
  122. ; -----------------------------------------------------------------------
  123. ;    Initialize for loop
  124. ;
  125. Read_Comm:
  126.     S9 = ""                         ; Clear buffer
  127.     N27 = 0             ; Size of S9 buffer
  128.     SET RMODE BINARY        ; Binary comm read
  129. ;
  130. ;    Now, sit on the COMM port waiting for a read
  131. ;
  132. RCOM100:
  133.     SET TIMER            ; Set timer for now
  134.     WHILE NOT RECEIVE and NOT HITKEY; Loop, awaiting activity
  135.        IF NOT CONNECTED GOTO RCOM500; If modem reports CD dropped
  136.        TSINCE N28,N29,N30        ; Look at time since start
  137.        IF NOT ZERO N28 or N29 GT 3 GOTO RCOM400
  138.        ENDWHILE
  139. ;
  140. ;    Catch comm chars
  141. ;
  142.     IF RECEIVE            ; Something on the comm port
  143.        RGET S27 1 180        ; .. so read it
  144.        IF FIND S27 "^M" GOTO RCOM300; Catch c/r here
  145.        GOTO RCOM200         ; And skip to process
  146.        ENDIF
  147. ;
  148. ;    Catch sysop (kbd) chars
  149. ;
  150.     IF HITKEY            ; Something on the kbd
  151.        KEYGET S27            ; .. so read it
  152.        IF FIND S27(0:1) "0d"        ; Allow sysop to do c/r
  153.           TRANS "!"                 ; Echo to caller
  154.           GOTO RCOM300        ; go handle c/r
  155.           ENDIF
  156.        IF FIND S27(0:1) "08"        ; Allow sysop to do b/s
  157.           ITOC 8 S27        ; Place in buffer
  158.           S27(1:79) = ""            ; and remove remainder
  159.           ENDIF
  160.        LENGTH S27 N28        ; Take length of read
  161.        IF N28 GT 1            ; Must be ascii char
  162.           SOUND 100,400        ; Else, bronx cheer
  163.           GOTO RCOM100        ; .. and throw away
  164.           ENDIF
  165.        IF NOT (FIND S27 "^H" and N27 EQ 0) TRANS S27; Echo char to caller
  166.        CURSOR N28 N29        ; Read cursor pos
  167.        ATSAY N28 N29 (text) S27    ; Echo to console
  168.        IF FIND S27 "^H"             ; If backspace entered
  169.           IF N27 GT 0 DEC N29    ; Backspace cursor position
  170.        ELSE             ; Not a backspace
  171.           INC N29            ; Increment col pos
  172.           ENDIF
  173.        LOCATE N28 N29        ; Set new cursor pos
  174.        ENDIF
  175. ;
  176. ;    Handle the received char  - 1st, look for backspaces
  177. ;
  178. RCOM200:
  179.     IF FIND S27(0:0) "^H"           ; Backspace
  180.        IF ZERO N27 GOTO RCOM100    ; Don't backspace past rightmost
  181.        DEC N27            ; Decrement count so far
  182.        IF N27 GT 0            ; If anything remains in buffer
  183.           S9 = S9(0:N27-1)        ; .. remove last char
  184.        ELSE
  185.           S9 = ""                   ; Make null again
  186.           ENDIF
  187.        GOTO RCOM100         ; And continue looping
  188.        ENDIF
  189. ;
  190. ;    Buffer up anything else
  191. ;
  192.     S9 = S9*S27            ; Concatenate char
  193.     INC N27             ; Increment count bufferred
  194.     IF N27 LT 80 GOTO RCOM100    ; Loop if we haven't 80
  195. ;
  196. ;    Look at the buffer we've collected
  197. ;
  198. RCOM300:
  199.     FIND S9 "NO CARRIER"            ; Test for message from modem
  200.     IF FOUND GOTO RCOM500        ; If modem didn't report 'CD' true
  201. ;
  202. ;    Return 'text read'
  203. ;
  204.     SET RMODE ASCII         ; Normal comm read restored
  205.     SET FLAG(0) OFF         ; Report to caller
  206.     RETURN                ; Return with text in S9
  207. ;
  208. ;    Timeout on the call
  209. ;
  210. RCOM400:
  211.     TRAN "^M^J... autodisconnect due to timeout^M^J"
  212.     MESSAGE "^M^J... autodisconnect due to timeout"
  213.     GOTO RComm_Exit         ; Exit cycle in the usual manner
  214. ;
  215. ;    Disconnect was reported.
  216. ;
  217. RCOM500:
  218.     MESSAGE  "^M^JCaller disconnected"
  219. ;
  220. ;    Read_Comm error exit
  221. ;
  222. RComm_Exit:
  223.     SET RMODE ASCII         ; Normal comm read restored
  224.     SET FLAG(0) ON            ; Report to caller
  225.     RETURN                ; Return to the caller
  226. ;
  227. ;    Usages:
  228. ;      S0 -> main password
  229. ;      S1 -> ID
  230. ;      S2 -> Default drive/subdir
  231. ;      S3 -> DOS password
  232. ;      S8 -> File name buffer
  233. ;      S9 -> General read buffer
  234. ;
  235. ;    Begin the sequence...
  236. ;
  237. Restart:
  238.     CHDIR S29        ; Reset to default drive
  239.     SET RECHO OFF        ; Turn off echo for us
  240.     SET RDISP OFF        ; Disable display of rcvd chars
  241.     CLEAR            ; Clear screen
  242.     LOCATE 0,0        ; Set to home
  243. ;
  244. ;    Go into auto answer (echo off, answer on 3rd)
  245. ;    Also: Return result codes, word form, with CONNECT 1200
  246. ;
  247. ;
  248.     IF NOT ISSC "$$$SCHED"  ; If scheduler didn't start us
  249.        HANGUP        ; HANGUP and leave modem in cmd mode
  250.        MESSAGE "^M^JWaiting...!"
  251.        PAUSE 3        ; Wait 3 secs for modem to settle
  252.        ENDIF
  253.     SET BAUD S20(5:8)    ; Starting speed
  254.     TRANSMIT S21        ; Transmit modem initialization
  255. ;
  256. ;    Wait for a connect
  257. ;
  258. WAIT_IT_OUT:
  259.     RGET S9 80 180
  260.     IF NOT SUCCESS GOTO Wait_IT_Out
  261.  
  262.     FIND S9 "NO CARRIER"
  263.     IF FOUND GOTO Exit
  264.  
  265.     FIND S9 "CONNECT"
  266.     IF NOT FOUND GOTO WAIT_IT_OUT
  267. ;
  268. ;    Connection established: Adjust our linespeed if need be
  269. ;
  270.     GOSUB AutoBaud        ; Change rate according to CONNECT MSG
  271. ;
  272. ;    Issue a greeting
  273. ;
  274.     PAUSE 2         ; Let the modem settle
  275.     RFLUSH            ; Clear junk
  276.     TRAN "^M^JThe Flying Scotsman greets you!!^M^J"
  277.     SET RECHO ON        ; Turn on echo (back to caller)
  278.     SET RDISP ON        ; Turn on display of rcvd chars
  279.     LOG OPEN "HOSTLOG"
  280. ;
  281. ;    Request an ID
  282. ;
  283. ID_Query:
  284.     MESS "^M^JID prompt: "  ; Local console indicator
  285.     TRANSMIT "^M^JEnter your ID: "
  286.  
  287.     GOSUB Read_Comm     ; Read into S9
  288.     IF FLAG(0) GOTO Exit    ; If first flag rtns set, disconn and start over
  289.  
  290.     SWITCH S9
  291.        CASE "_NULL"         ; Test for nothing entered
  292.           TRAN "You must be someone^M^J"
  293.           GOTO Exit     ; Don't let noone in
  294.       ENDCASE        ; End of ridicule
  295.     ENDSWITCH        ; End of ID test
  296.  
  297.     CLOG "* Host mode logon by "*S9
  298. ;
  299. ;    Request a password
  300. ;
  301.     TRANSMIT "^M^JEnter your password: "
  302.     LOG SUSPEND
  303.     SET RECHO OFF        ; Turn of echo of received text
  304.     SET RDISPLAY OFF    ; Turn off echo to console too
  305.  
  306.     GOSUB Read_Comm     ; Read into S9
  307.     IF FLAG(0) GOTO Exit    ; If first flag rtns set, disconn and start over
  308.  
  309.     LOG RESUME        ; Restore logging
  310.     SET RECHO ON        ; Restore echo
  311.     SET RDISPLAY ON     ; Turn on echo to console again
  312. ;
  313. ;    Test for the main password
  314. ;
  315.     SWITCH S9
  316.        CASE S0        ; Test for match with S0
  317.           TRANSMIT "^M^J"   ; OK - good password
  318.        ENDCASE        ; End match with S0
  319.        DEFAULT        ; Not one of the above
  320.           TRANSMIT "Sorry , but you're not authorized."
  321.           GOTO Exit     ; And disconnect
  322.        ENDCASE        ; End of DEFAULT
  323.     ENDSWITCH
  324. ;
  325. ;    Now - do something
  326. ;
  327. Main_Prompt:
  328.     MESS "^M^JMain prompt: "; Local console indicator
  329.     TRAN "^M^JC)hdir F)ilelist, P)athlist, U)pload, D)ownload, or E)xit: "
  330.  
  331.     GOSUB Read_Comm     ; Read into S9
  332.     IF FLAG(0) GOTO Exit    ; If first flag rtns set, disconn and start over
  333.  
  334.     SWITCH S9        ; Test the entry
  335.        CASE "C"
  336.           GOTO CHDIR
  337.        ENDCASE
  338.  
  339.        CASE "D"
  340.           GOTO DOWNLOAD
  341.        ENDCASE
  342.  
  343.        CASE "E"
  344.           TRAN "Ok... bye^M^J"
  345.           GOTO EXIT
  346.        ENDCASE
  347.  
  348.        CASE "F"
  349.           GOTO FILELIST
  350.        ENDCASE
  351.  
  352.        CASE "P"
  353.           GOTO PATHLIST
  354.        ENDCASE
  355.  
  356.        CASE "U"
  357.           GOTO UPLOAD
  358.        ENDCASE
  359.  
  360.        CASE "X"
  361.           GOTO DOS
  362.        ENDCASE
  363.  
  364.        CASE "Y"
  365.           GOTO DROPDOS
  366.        ENDCASE
  367.  
  368.        CASE "OFF"
  369.           TRAN "Ok... bye^M^J"
  370.           GOTO EXIT
  371.        ENDCASE
  372.     ;
  373.     ;    Default case for typists
  374.     ;
  375.        DEFAULT
  376.           IF FIND S9 "CHDIR" GOTO CHRIR     ; If entry contained "CHDIR"
  377.           IF FIND S9 "DOWN"  GOTO DOWNLOAD  ; Try for larger
  378.           IF FIND S9 "FILE"  GOTO FILELIST  ; Try for larger
  379.           IF FIND S9 "PATH"  GOTO PATHLIST  ; Try for larger
  380.           IF FIND S9 "UP"    GOTO UPLOAD    ; Try for larger
  381.           IF FIND S9 "DOS"   GOTO DOS       ; Try for larger
  382.  
  383.           TRAN "^M^JCommand not recognized... try again"
  384.           GOTO Main_Prompt    ; If none of the above
  385.        ENDCASE        ; End of DEFAULT
  386.     ENDSWITCH
  387. ;
  388. ;    Can't get here because of the DEFAULT in the SWITCH above
  389. ;
  390.     TRAN "^M^JThank you veddy much.^M^J"
  391.     GOTO Main_Prompt
  392. ;
  393. ;    General exit routine - don't GOTO from within a subroutine!!!
  394. ;
  395. EXIT:
  396.     CLOG "* Host mode exit"
  397.     LOG CLOSE        ; Turn off logging
  398.     MESS "^G"               ; Beep to indicate completion
  399.     IF ISSC "$$$SCHED" GOTO End ; Hook for scheduler return
  400.     GOTO Restart        ; And start over
  401. ;
  402. ;    Subroutine: Query for a file name - return in S8
  403. ;
  404. File_Query:
  405.     MESS "^M^JFname query: "; Local console indicator
  406.     TRAN "^M^JEnter the file name: "
  407.  
  408.     GOSUB Read_Comm     ; Read into S9
  409.     IF FLAG(0) RETURN    ; If first flag rtns set, done
  410.  
  411.     ASSIGN S8 S9        ; Move fname into another variable
  412.     SWITCH S8
  413.        CASE "_NULL"         ; Test for nothing entered
  414.           SET FLAG(1) ON    ; Report to caller
  415.           RETURN        ; Return right here w/ flag set
  416.        ENDCASE
  417.     ENDSWITCH        ; End of ID test
  418.  
  419.     SET FLAG(1) OFF     ; Report to caller
  420.     RETURN            ; Return to caller
  421. ;
  422. ;    XMODEM Upload (up from caller)
  423. ;
  424. UPLOAD:
  425.     MESS "^M^JUpload from caller"
  426.  
  427.     GOSUB File_Query    ; Ask for a file name
  428.     IF FLAG(0) GOTO Exit    ; If first flag rtns set, disconn and start over
  429.     IF FLAG(1) GOTO Main_Prompt; If no file returned, start over
  430.  
  431.     IF ISFILE S8        ; If file exists
  432.        TRAN "^M^JFile already exists"
  433.        GOTO UPLOAD        ; Ask again
  434.        ENDIF
  435.  
  436.     MESS "!Method prompt: " ; Local console indicator
  437.     TRAN "^M^JW)xmodem, X)modem, Y)modem (X1k), Z)modem, or K)ermit: "
  438.  
  439.     GOSUB Read_Comm     ; Read into S9
  440.     IF FLAG(0) GOTO Main_prompt; If first flag rtns set, disconn and start over
  441.  
  442.     SWITCH S9        ; Test the entry
  443.        CASE "W"
  444.           GETFILE WXMODEM S8
  445.        ENDCASE
  446.        CASE "X"
  447.           GETFILE XMODEM S8
  448.        ENDCASE
  449.        CASE "Y"
  450.           GETFILE YMODEM S8
  451.        ENDCASE
  452.        CASE "Z"
  453.           GETFILE ZMODEM
  454.        ENDCASE
  455.        CASE "K"
  456.           GETFILE KERMIT    ; FIle name supplied by caller
  457.        ENDCASE
  458.        DEFAULT
  459.           TRAN "^M^JInvalid transfer selection"
  460.           GOTO Main_Prompt
  461.        ENDCASE
  462.     ENDSWITCH
  463.  
  464.     GOTO EOTransfer         ; Report success/failure
  465. ;
  466. ;    XMODEM Download (down to caller)
  467. ;
  468. DOWNLOAD:
  469.     MESS "^M^JDownload to caller"
  470.  
  471.     GOSUB File_Query    ; Ask for a file name
  472.     IF FLAG(0) GOTO Exit    ; If first flag rtns set, disconn and start over
  473.     IF FLAG(1) GOTO Main_Prompt; If no file returned, start over
  474.  
  475.     IF NOT ISFILE S8    ; If file doesn't exist
  476.        TRAN "^M^JFile doesn't exist"
  477.        GOTO DOWNLOAD    ; Ask again
  478.        ENDIF
  479.  
  480.     MESS "^M^JMethod prompt "
  481.     TRAN "^MW)xmodem, X)modem, Y)modem (X1k), Z)modem, K)ermit, or A)scii: "
  482.  
  483.     GOSUB Read_Comm     ; Read into S9
  484.     IF FLAG(0) GOTO Main_Prompt; If first flag rtns set, disconn and start over
  485.  
  486.     SWITCH S9        ; Test the entry
  487.        CASE "A"
  488.           SENDFILE ASCII S8
  489.        ENDCASE
  490.        CASE "W"
  491.           SENDFILE WXMODEM S8
  492.        ENDCASE
  493.        CASE "X"
  494.           SENDFILE XMODEM S8
  495.        ENDCASE
  496.        CASE "Y"
  497.           SENDFILE YMODEM S8
  498.        ENDCASE
  499.        CASE "Z"
  500.           SENDFILE ZMODEM S8
  501.        ENDCASE
  502.        CASE "K"
  503.           SENDFILE KERMIT S8
  504.        ENDCASE
  505.        DEFAULT
  506.           TRAN "^M^JInvalid transfer selection"
  507.           GOTO Main_Prompt
  508.        ENDCASE
  509.     ENDSWITCH
  510.  
  511.     GOTO EOTransfer         ; Report success/failure
  512. ;
  513. ;    End of transfer... note result on local console
  514. ;
  515. EOTRANSFER:
  516.     IF NOT SUCCESS
  517.        MESS "^M^JTransfer failed"
  518.     ELSE
  519.        MESS "^M^JTransfer OK"
  520.        ENDIF
  521.     GOTO Main_Prompt
  522. ;
  523. ;    Filelist... awkward... but it works
  524. ;
  525. FILELIST:
  526.     MESS "^M^JFilelist command: "   ; Local console indicator
  527.     TRAN "^M^J Working..."          ; May take a moment
  528.  
  529.     DOS "DIR >HOSTTEMP.TXT"         ; To a temp file
  530.     TRAN "^M^J"                     ; Send a c/r
  531.     SENDFILE ASCII "HOSTTEMP.TXT"
  532.     TRAN "^M^J"                     ; Send a c/r
  533.  
  534.     DOS "DEL HOSTTEMP.TXT"          ; Clean up after us
  535.     GOTO Main_Prompt        ; And continue
  536. ;
  537. ;    CHDIR... Query for a path.
  538. ;
  539. CHDIR:
  540.     MESS "^M^JCHDIR Command: "      ; Local console indicator
  541.     TRAN "^M^JEnter the drive:subdirectory: "
  542.  
  543.     GOSUB Read_Comm     ; Read into S9
  544.     IF FLAG(0) GOTO Main_Prompt; If first flag rtns set, disconn and start over
  545.  
  546.     CHDIR S9        ; Do it.
  547.     GOTO Main_Prompt    ; And continue
  548. ;
  549. ;    Path tree... awkward... but it works
  550. ;
  551. PATHLIST:
  552.     MESS "^M^JPathlist command: "; Local console indicator
  553.     TRAN "^M^J Working..."  ; May take a moment
  554.  
  555.     DOS "Treed >HOSTTEMP.TXT" ; To a temp file
  556.     TRAN "^M^J"             ; Send a c/r
  557.     SENDFILE ASCII "HOSTTEMP.TXT"
  558.     TRAN "^M^J"             ; Send a c/r
  559.  
  560.     DOS "DEL HOSTTEMP.TXT"  ; Clean up after us
  561.     GOTO Main_Prompt    ; And continue
  562. ;
  563. ;    DOS command: Accept a command and execute it
  564. ;
  565. DOS:
  566.     GOSUB DOSPSW        ; Request a password
  567.     IF FAILED GOTO Main_Prompt
  568. ;
  569. ;    DOS... Query for a command
  570. ;
  571.     MESS "^M^JDOS Command: "; Local console indicator
  572.     TRAN "^M^JEnter the command: "
  573.  
  574.     GOSUB Read_Comm     ; Read into S9
  575.     IF FLAG(0) GOTO Main_Prompt; If first flag rtns set, disconn and start over
  576.  
  577.     TRAN "^M^J Working..."  ; May take a moment
  578.  
  579.     CONCAT S9 ">HOSTTEMP.TXT"
  580.     DOS   S9        ; Do it.
  581.  
  582.     TRAN "^M^J"             ; Send a c/r
  583.     SENDFILE ASCII "HOSTTEMP.TXT"
  584.     TRAN "^M^J"             ; Send a c/r
  585.  
  586.     DOS "DEL HOSTTEMP.TXT"  ; Clean up after us
  587.     GOTO Main_Prompt    ; And continue
  588. ;
  589. ;    DOSPSW    Request a password
  590. ;
  591. DOSPSW:
  592.     MESSAGE "^M^JRequesting DOS password"
  593.     LOG SUSPEND        ; Turn off logging
  594.     SET RECHO OFF        ; .. and don't echo passsword
  595.     SET RDISPLAY OFF    ; Turn off echo to console too
  596.  
  597.     TRANSMIT "^M^JEnter the DOS password: "
  598.  
  599.     GOSUB Read_Comm     ; Read into S9
  600.     IF FLAG(0) GOTO DOSPERR ; If first flag rtns set, exit, failed
  601.  
  602.     LOG RESUME        ; Turn on logging again
  603.     SET RECHO ON        ; .. and begin echoing again
  604.     SET RDISPLAY ON     ; Turn on echo to console again
  605. ;
  606. ;    Test for the our password
  607. ;
  608.     SWITCH S9
  609.        CASE S3        ; Test for match with S3
  610.           TRANSMIT "^M^J"   ; OK - good password
  611.        ENDCASE        ; End match with S3
  612.        DEFAULT        ; Not one of the above
  613.           TRANSMIT "Sorry , but you're not authorized."
  614.           GOTO DOSPERR    ; Exit, failed
  615.        ENDCASE        ; End of DEFAULT
  616.     ENDSWITCH
  617. ;
  618. ;    Return with success
  619. ;
  620.     LOG RESUME        ; Restart log
  621.     SET SUCCESS ON        ; Set indicator for caller
  622.     RETURN
  623. ;
  624. ;    Return with success
  625. ;
  626. DOSPERR:
  627.     LOG RESUME        ; Restart log
  628.     SET SUCCESS OFF     ; Set indicator for caller
  629.     RETURN
  630. ;
  631. ;    DROPDOS command: Request a password
  632. ;
  633. DROPDOS:
  634.     IF NULL S24
  635.        TRAN "^M^JCommand not recognized... try again"
  636.        GOTO Main_Prompt    ; Can't do it
  637.        ENDIF
  638.     GOSUB DOSPSW        ; Request a password
  639.     IF FAILED GOTO Main_Prompt
  640. ;
  641. ;    DROPDOS... Build a batch file
  642. ;
  643.     FOPENO "HOSTTEMP.BAT" TEXT
  644.     IF NOT SUCCESS
  645.        TRAN "File error - cannot drop to DOS^M^J"
  646.        GOTO Main_Prompt
  647.        ENDIF
  648.  
  649.     WRITE "ECHO OFF!"       ; Start the batch file
  650.     S0 = S24        ; Setup up drop to DOS command
  651.     PRESERVE S0        ; Make it printable
  652.     WRITE S0        ; Write the Drop to DOS command
  653.     WRITE "!"               ; And a terminating cr
  654.  
  655.     WRITE S29(0:1)*"!"      ; Change to drive
  656.     IF NOT NULL S29(2:79) WRITE "CD "*S29(2:79)&"!" ; Rtn to original dir
  657.     WRITE "COM-AND /q/p/fHOST!" ; inhibit COM-AND.CMD; take modem as set
  658.     WRITE "^Z"
  659.     FCLOSEO         ; And we're done with it
  660.  
  661.     STORE STRING "HOSTTEMP.STR" ; Used by main-line to signal doorway rtn
  662.     CLOG "* Drop-to-DOS"
  663.  
  664.     SET TTHRU OFF        ; Disable type through
  665.     STACK CLEAR        ; Place invocation of the batch file
  666.     STACK "HOSTTEMP.BAT!"   ; .. into BIOS's area
  667.     BYE            ; Do it.
  668. ;
  669. ;    Auto baudrate detect (according to message in S9)
  670. ;
  671. AutoBaud:
  672.     IF FIND "_DDOVER" "ON" RETURN   ; No autobaud if this set
  673.  
  674.     IF FIND S9 "1200"
  675.        SET BAUD 1200        ; Set to new rate
  676.        RETURN            ; We're done.
  677.        ENDIF
  678.  
  679.     IF FIND S9 "2400"
  680.        SET BAUD 2400        ; Set to new rate
  681.        RETURN            ; We're done.
  682.        ENDIF
  683.  
  684.     IF FIND S9 "4800"
  685.        SET BAUD 4800        ; Set to new rate
  686.        RETURN            ; We're done.
  687.        ENDIF
  688.  
  689.     IF FIND S9 "9600"
  690.        SET BAUD 9600        ; Set to new rate
  691.        RETURN            ; We're done.
  692.        ENDIF
  693.  
  694.     IF FIND S9 "14400" or FIND S9 "14.4"
  695.        SET BAUD 14k         ; Set to new rate
  696.        RETURN            ; We're done.
  697.        ENDIF
  698.  
  699.     IF FIND S9 "19200" or FIND S9 "19.2"
  700.        SET BAUD 19k         ; Set to new rate
  701.        RETURN            ; We're done.
  702.        ENDIF
  703.  
  704.     IF FIND S9 "38400" or FIND S9 "38.4"
  705.        SET BAUD 38k         ; Set to new rate
  706.        RETURN            ; We're done.
  707.        ENDIF
  708.  
  709.     IF FIND S9 "57600" or FIND S9 "57.6"
  710.        SET BAUD 57k         ; Set to new rate
  711.        RETURN            ; We're done.
  712.        ENDIF
  713. ;
  714. ;    None of the above... set to 300
  715. ;
  716.     SET BAUD 300        ; Set to 1200 baud
  717.     RETURN            ; We're done.
  718.